import pandas as pd
df = pd.DataFrame(data={
    '学号': ['x1', 'x2', 'x3', 'x4', 'x5'],
    '班级': ['1班', '1班', '1班', '2班', '2班'],
    '姓名': ['张三', '李四', '王五', '韩六', '赵七'],
    '性别': ['男', '男', '男', '女', '女'],
    '身高': [177, 151, 167, 175, 153],
    '语文成绩': [92, 84, 80, 77, 87],
    '学分': [1.5, 2.3, 3.2, 1.2, 1.8],
    '日期': ['2019/3/23', '2019/3/24', '2019/3/25', '2019/3/26', '2019/3/27']
})


# apply
# 对姓名这一列的每个元素添加字母'xm'
def myfunc(x):
    return 'xm' + x


df['姓名'] = df['姓名'].apply(myfunc)
# 输出
#    学号  班级    姓名 性别   身高  语文成绩   学分         日期
# 0  x1  1班  xm张三  男  177    92  1.5  2019/3/23
# 1  x2  1班  xm李四  男  151    84  2.3  2019/3/24
# ......


# 对成绩这一列，如果成绩小于90分则改成90份
def myfunc(x):
    if x < 90:
        return 90
    else:
        return x

df['语文成绩'] = df['语文成绩'].apply(myfunc)
# 输出
#    学号  班级  姓名 性别   身高  语文成绩   学分         日期
# 0  x1  1班  张三  男  177    92  1.5  2019/3/23
# 1  x2  1班  李四  男  151    90  2.3  2019/3/24
# ......

# 分组应用apply
# 需要注意的是，myfunc接收的参数是pandas.Series类型
def myfunc(series):
    return series.max()

# 计算每个班级语文成绩最高分
df.groupby(by=['班级'], as_index=False)['语文成绩'].apply(myfunc)
# 0    92
# 1    90
# dtype: int64
